home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Games / Xconq 7.0d16 / doc / TODO < prev    next >
Encoding:
Text File  |  1993-12-20  |  13.6 KB  |  364 lines  |  [TEXT/MPS ]

  1. THINGS TO DO
  2.  
  3. (These must be handled before releasing the next version.)
  4.  
  5. --Overall
  6.  
  7. --GDL
  8.  
  9. More syntax for generic variants:
  10.   ([str] id default [range]
  11.    (case1 [str] forms ...)  ; can subst ^id with slider value
  12.    (case2 [str] forms ...)
  13.   )
  14.  
  15. Error messages during reading should indicate current and/or chain
  16. of including modules.
  17.  
  18. --Types and Objects
  19.  
  20. Agreement enforce may be absolute (done by game code), by changes in loyalty,
  21. or not at all.
  22. Some unit types should be unwilling to break a treaty.
  23. (In some games,)
  24. Should humans have to declare war explicitly?
  25. DoW may not be possible or meaningful in some games...
  26. DoW is agreement by single player doing the declaration, terms are to
  27. treat side as enemy (doctrine), and to hit other side (how often?),
  28. could demand a surrender of some sort.
  29. DoW must be public.
  30. Up to other sides how to respond.
  31. Peace treaty includes terms to nullify DoW.
  32. In general, terms should be able to include refs to other agreements.
  33. DoW can always be rescinded by player alone, make it have morale
  34. consequences?
  35.  
  36. Define feelings toward each side as pair of bytes, for/against and
  37. willingness to act on feeling.  Feeling toward own side is morale.
  38.  
  39. Fix occupancy calcs so that units in exclusive spaces do not have
  40. their sizes counted in overall fullness.
  41.  
  42. Ensure that borders with edge cells are either always handled
  43. correctly (as in crossing to leave world?) or disabled.
  44.  
  45. --Setup
  46.  
  47. Refs to be patched should be handled as Lisp objects in transport slots,
  48. then can cast/eval later to derive actual unit symbolically or with
  49. literal id.
  50.  
  51. Add usage of range of advantages, indicate in setup dialogs,
  52. complain if exceeded on command line.
  53.  
  54. --Plans and Tasks
  55.  
  56. When transport gets as far as it can in transporting a unit, and is
  57. then blocked, should let unit get off if possible, instead of running
  58. to do something else.
  59.  
  60. If unit's goal is to get to a distance place, but is blockaded by inactive
  61. enemy, consider attacking instead of waiting or trying to go around.
  62.  
  63. Define a "meet" task where transport and occ (or whatever pair
  64. or group) converge on a mutually acceptable place.  Track progress,
  65. give up if not getting closer.
  66.  
  67. Check on what happens to dead or immobilized units with tasks.
  68.  
  69. Check on likely success of resupply task, if dubious commit to forward
  70. motion.  Consult AI or human prefs?
  71.  
  72. If can never capture anything, don't ever search for easy captures.
  73.  
  74. Add a generic "orbit" constraint for any plan, tieable to unit and/or
  75. position.  Player can use to set home locations etc.  Useful to be able
  76. to invert and say to avoid some areas.  Test with pbys in flattop staying
  77. with task force while still patrolling around.
  78.  
  79. When units put to sleep, kernel has to set alarms properly (according
  80. to doctrine or what?).
  81.  
  82. A hit-unit task should
  83. doublecheck for a nearby
  84. unit of matching type/side that *is* under observation, might be
  85. actual target trying to sneak away.  Don't have to bother if type
  86. cannot move or be carried (should identify all these ahead of time),
  87. disappearance of such a type means that it no longer exists.
  88.  
  89. Attack tasks should go after undamageable units with visible occupants.
  90.  
  91. --Actions
  92.  
  93. In movement-related action, copy z coord properly everywhere (assume
  94. alt-preserving if not otherwise speced).  In check_move_action, look
  95. at unit->z & 1 == 1, check conn capacity else just look at alt limits
  96. and cell capacity.
  97.  
  98. Check alt diffs in combat actions (and other unit interactions?)
  99.  
  100. When unit damaged during turn, should adjust acp down as if it had started the
  101. turn damaged.
  102.  
  103. Changing type should have a material cost, so peon can buy title.
  104. Extend to material prerequisite cost for all actions? (lots of tables!)
  105.  
  106. When looking for next actor, skip over units that can't possibly do
  107. anything even if they have some acp. (scan the actionvector?)
  108.  
  109. Add attacker-adjust, defender-adjust to distinguish units in a 
  110. group of combat parameters?
  111.  
  112. Assault and fire need separate ammo consumption.  Limit is like
  113. uum_ammo_to_use_max(u1, u2, m), can request less (how should interfaces
  114. do this smoothly?)  Derive from notion of partial commitment?
  115.  
  116. Response to capture attempt might be to hit capturing unit?
  117. Capture after combat is really a side effect where a unit surrenders
  118. (implies attacking unit might end up doing the surrendering!).
  119.  
  120. Chance to hit when firing decreases depending
  121. on distance and type of target.  Define uu range-for-max-hit-chance,
  122. hit-chance-at-max-range, interpolate linearly.
  123.  
  124. --Backdrop
  125.  
  126. Interpret contents of "messages" and "special-effects" slots in scorekeepers.
  127.  
  128. --Coding
  129.  
  130. Dispatch on ai type when drawing AI info about cell.
  131. Drawing code should be in special file that includes both
  132. relevant ui.h and ai.h
  133.  
  134. Write a search_straight_line(x0, y0, x1, y1, fn) that scans
  135. exact line between lines.  Could also do 3d version.
  136.  
  137. To get out of a game, call exit_game(), which calls back to interface
  138. with close_display() or close_all_displays().
  139.  
  140. Collect/write stats on each call to run_game - # unit scanned, # acted,
  141. # actions, # plan executions.  Also classify by type and side.
  142.  
  143. Make routines unit_trusts_unit(), unit_{friendly,neutral,enemy}_to_side()?
  144.  
  145. For cmdline-based progs, check all players specs, then quit if errors.
  146.  
  147. For each scorekeeper, add an internal flag that saves applicability
  148. of scorekeeper, also calc for current turn - if changed, then AI
  149. analysis code should re-run.
  150.  
  151. --Misc
  152.  
  153. Mention in player doc that advantage rounds down rather than up.
  154.  
  155. Clean up unit_changes_side some more.
  156.  
  157. Players should be able to indicate a willingness to declare a draw,
  158. all interfaces should be able to display this bit.
  159. Game exits when all players indicate willingness to draw (check
  160. whenever any interface changes one of these)
  161.  
  162. Doctrine and unit plans should include rules about when units should
  163. attack automatically.  Should be careful or will lose units to foolish
  164. actions.
  165.  
  166. Handle some glimpses as special event types, such as spotting occupants
  167. in a unit, instead of trying to draw on display somehow.
  168. Call glimpse_unit(side, unit).
  169.  
  170. Ensure erasure of images of own units that are actually dead and gone.
  171.  
  172. Fix AI testing script to kill a game if spins too long, then display
  173. how much progress made.  (Add time collection to skelconq?)
  174.  
  175. --AI
  176.  
  177. Fix midrange theater boundary to be more like halfway across world, even
  178. if starting area is very small.
  179.  
  180. When adjusting theaters, decide ahead of time which should grow and
  181. which shrink, then use spare layer to buffer changes while scanning.
  182.  
  183. Never draw theater boundaries against edge cells.
  184.  
  185. Explorers still need to attempt to capture any "useful" units seen nearby.
  186.  
  187. If bases offer any kind of advantage at all, build lots of them.
  188.  
  189. If only one builder available, should "timeshare" it properly.
  190.  
  191. Should choose cheap types to hold onto a country after capturing part of
  192. it (also defend the newly captured units properly).
  193.  
  194. If no penalty for changing builds, then only ever schedule one at a time
  195. (or two if really cheap? how to decide?)
  196.  
  197. Use perimeter/remote rings only for worlds that need exploration to
  198. find other sides, else make theaters around each side's home, grow
  199. around units in general (a la country growing).  Define a "short-range
  200. interaction radius" that specs growth around each unit.
  201.  
  202. Downgrade need for a particular type if a large number has accumulated
  203. around builder(s).
  204.  
  205. Need to record spotting of human-run units that attempt to sneak
  206. away quickly, concentrate patrolling and exploration there.
  207. (in general, keep an accumulated count of contacts in each theater)
  208.  
  209. Designer should be able to toggle flags for mplayer,
  210. force reevaluation etc.
  211.  
  212. If moderate-to-high chance of unit surround, should put units in
  213. lines and other formations that can't be surrounded easily.
  214.  
  215. A side should act primarily defensively if it satisfies a goal,
  216. but the game is not over and another side could take away.
  217.  
  218. Guess at likely theater for contacts, carve out of existing theaters,
  219. reassign/replan *all* units.
  220.  
  221. Should detect when a unit has nonzero acp but can't do anything anyway,
  222. and put it in reserve.  (Look for results of NO_ACP?)
  223.  
  224. When a unit executes its plan, routines like find_target()
  225. either get a value from AI or search around (implicit "nobrains" AI?).
  226. (AI should have prioritized list of targets composed already and
  227. sorted by theater and goal etc.)
  228.  
  229. When choosing from needed units, favor types that are closer at hand?
  230.  
  231. Unit should attempt to capture something if it is a) useful (to accomplish
  232. goal directly or indirectly) or b) useful to enemy and should be denied.
  233.  
  234. If parts of world view not necessarily up-to-date, need to do pickets
  235. or patrols to guarantee as much coverage as possible. (use view dates)
  236.  
  237. Event types include combat, spotting another unit (with given type/side/
  238. distance/relationship), spotting terrain type, level crossing of unit
  239. attrs (hp, supply), regular intervals, (turn) timeout, player intervention
  240. ("wakeup"), change in another unit (death of leader), entered a hex.
  241. For efficiency, define a g_event_radius that is max dist that a unit will
  242. be notified of the appearance of another unit, otherwise have to check all
  243. units against each other.
  244.  
  245. Fix machine player to know about non-wrapping worlds.
  246.  
  247. Redo analysis whenever set of active scorekeepers changes (but should
  248. anticipate scorekeepers that might become active in the future?).
  249.  
  250. Need a way to estimate units hidden in transports, so can freak out
  251. over approaching transports.
  252.  
  253. --Interface
  254.  
  255. Decide general recommended algorithm for autoscrolling when near edge
  256. of display.
  257.  
  258. Add image of Syria flag.
  259.  
  260. Display unit id if closeups, toplines, etc, if debugging is on.
  261.  
  262. Draw single selected unit in a stack larger.
  263.  
  264. If already fully fueled, refuel commands should come back immediately.
  265.  
  266. Draw single selected occupant in UR corner next to transport, when at
  267. mags that show both transport and occs.
  268.  
  269. Define a general way to distinguish transports with occs from empty
  270. transports at 16x16 mag.
  271.  
  272. End-of-game stats should use own system for double-entry bookkeeping.
  273. (should display discrepancies only if nonzero)
  274.  
  275. Strip out most of xt version, make it quit with a warning usually.
  276.  
  277. Support player messaging via send_message(side, str, side or sidemask).
  278.  
  279. Fix interface so that only one base gets ordered to be built, but lots
  280. of infantry from cities.  (in doctrine, feed to interface? - needs to
  281. be part of default doctrine for all sides in a game!)
  282.  
  283. Add more help nodes to explain general concepts like acp.
  284.  
  285. Help info should have subr that takes bit vector for types and sends back
  286. a summary of properties or a table row.
  287.  
  288. Define text generators as
  289. char *make_text(Obj *maker, void *parms, char *buf)
  290. return mallocked string if no buf passed.
  291. Fns are like action_result_desc(side, unit, action, code)...
  292. Need some sort of default grammar used when game designs don't want
  293. to add anything special.
  294. Copy ^0, ... concept for format strings generated by grammars.
  295. Use grammar idea for narrative generation.
  296. Do for actions, notable backdrop events, summaries.
  297. (text disband-narrative
  298.   (self infantry "%2 goes home")
  299.   (u* bomb "%1 dismantles %2")
  300.   )
  301. Match on action args to choose sentence, allow multiple weighted choices
  302. for variety, be able to tailor for each side.
  303. Similar to name gen grammars, but can't share code.
  304. Should be able to do both present and past tense generation.
  305. Routine is describe_thing(side(s), generator, parms[10]).
  306. (Would be generally useful to have a side-to-bit-vector conversion routine...)
  307. "Narrative" different from "message", is past sense, while "message"
  308. describes ongoing things.
  309. Need to do narrative descriptions / events for notable backdrop events
  310. such as migrations, storms, etc.
  311.  
  312. Replace draw_blast with a generic event callback for transient events,
  313. Allows interface to store or just display directly.
  314. [subsume with historical event recording?]
  315. Define transients in general.  Include duration and manifestation
  316. (name of visual/aural effect(s)), also size and visibility, by
  317. distance and perhaps unit type and/or tech level.
  318. Need a library of splats and sounds.
  319. Supporting interfaces need a timed loop, so kernel sends
  320. "display transient xxx" once and can forget about having
  321. to handle it further (also makes recordable in a sense).
  322. Should be able to tie transients to historical events?
  323. Support multiple sounds - ones for attack, hit, death, use diff ones
  324. for shooting, possibly movement noises.
  325. Should be able to define special win/lose sounds (cheers and raspberries),
  326. attach to interface's handling of events from kernel.
  327.  
  328. Compute centroid of feature if not defined, and attempting to display it.
  329. Center should be inside.
  330.  
  331. --Library
  332.  
  333. Units in std and classic game should *not* have any fuel until complete!
  334.  
  335. Reduce amts of ship ammo in standard game.
  336.  
  337. Bases should have long in-lengths in standard and modern games, since
  338. represents automatic support/supply setups, and moderate out-lengths
  339. to support ground units better.
  340.  
  341. If fighters had a low land/takeoff time, then could attack adj bombers
  342. a lot more than now (realistic), but bombers can't escape then, unless
  343. some sort of generic auto-retreat implemented (a good idea).  Auto-retreat
  344. might happen in addition to the hit, rather than instead of the hit.
  345. Refuel should consume part of flying time, but not all, then can
  346. fly many sorties against nearby targets.
  347.  
  348. Bases should "anti-protect" aircraft in periods involving both, but
  349. fighters should protect the base.
  350.  
  351. Finish adding the most common translations to misc/*2game.
  352.  
  353. Image tool should report which type of resource is generating a
  354. given image, so can find which to hack on (report for selected image only).
  355.  
  356. Gettysburg brigades should vary in quality and hp.
  357.  
  358. Set pelops units to be exactly those which participated,
  359. try to model Athenian grain trade (abstractly or concretely?)
  360.  
  361. WWII strategic games should have large number of predefined agreements
  362. constraining players.  Add more pre-existing units to all sides.
  363. Fleets should take longer to build?
  364.